package com.google.code.mochaccino.framework.crypto.keystore;

/*
 * Copyright 2012 Claude Houle claude.houle@gmail.com
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import com.google.code.mochaccino.framework.crypto.EncryptionProvider;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchProviderException;

public enum KeyStoreType {

	//Sun JCE
	JKS( "JKS", null, "jks" ),
	PKCS12( "PKCS12", null, "p12" ),
	PKCS12_3DES( "PKCS12-3DES-3DES", null, "p12" ),

	// Bouncy Castle
	JKS_BC( "BKS", EncryptionProvider.getBouncyCastleName(), "jks" ),
	PKCS12_BC_3DES( "PKCS12-DEF-3DES-3DES", EncryptionProvider.getBouncyCastleName(), "p12" ),
	PKCS12_BC( "PKCS12-DEF", EncryptionProvider.getBouncyCastleName(), "p12" ),;

	/** Extension */
	private String extension;

	/** Provider */
	private String provider;

	/** Type */
	private String type;

	/** Constructor */
	private KeyStoreType( String type, String provider, String extension ) {
		this.type = type;
		this.provider = provider;
		this.extension = extension;
	}

	/** Create new KeyStore */
	public KeyStore createNewKeyStore() throws KeyStoreException, NoSuchProviderException {
		if ( provider != null ) {
			return KeyStore.getInstance( type, provider );
		}
		return KeyStore.getInstance( type );
	}

	/** @return the extension */
	public String getExtension() {
		return extension;
	}
}
